<HTML>
<HEAD>
  <!-- Created with AOLpress/2.0 -->
  <!-- AP: Created on: 14-Dec-2000 -->
  <!-- AP: Last modified: 10-Jul-2005 -->
  <TITLE>Transform Dialog</TITLE>
  <LINK REL="icon" href="fftype16.png">
  <LINK REL="stylesheet" TYPE="text/css" HREF="FontForge.css">
</HEAD>
<BODY>
<DIV id="in">
<H1 ALIGN=Center>
  Transform Dialog
</H1>
<P>
<IMG SRC="transform.png" WIDTH="379" HEIGHT="395">
<P>
This dialog is available in the font, outline and metrics views. In the font
view it applies to all selected glyphs. In the outline view if there is a
selection then it applies to that. if there is no selection then it applies
to the entire glyph.
<P>
You may choose whether you want the transformation to be centered at the
glyph's origin, the center of the selection (or of the glyph as a whole if
there is no selection), or the location of the last point on which you clicked
the mouse.
<P>
You may apply several different transformations at once:
<DL>
  <DT>
    Do Nothing
  <DD>
    A very simple transformation.
  <DT>
    Move
  <DD>
    You may move the selection an arbitrary amount in the x and y directions
  <DT>
    Rotate
  <DD>
    You may rotate the selection an arbitrary number of degrees.
  <DT>
    Scale
  <DD>
    You may scale the two coordinates differently
  <DT>
    Scale Uniformly
  <DD>
    You may scale the two coordinates the same amount (which can of course be
    done above, but it's slightly easier only to set one number).
  <DT>
    Flip
  <DD>
    You may flip either horizontally or vertically<FONT COLOR="Red"><BR>
    <STRONG>Note: After flipping an outline you will almost certainly want to
    apply <A HREF="elementmenu.html#Correct">Element-&gt;Correct
    Direction</A>.</STRONG></FONT>
  <DT>
    Skew
  <DD>
    You may skew the selection a certain number of degrees (to create an oblique
    font for example).
  <DT>
    Rotate 3D Around...
  <DD>
    You may do a three dimensional rotation of the glyph around either the X
    axis or the Y axis. This operation is immediately followed by a projection
    of the result back into the xy-plane (A rotation around the Z axis is a normal
    rotaton (and isn't included here). <BR>
    Following the rotation by a projection produces the same results no matter
    what the sign of the angle (so there are no Clockwise/CounterClockwise options
    here).
  <DT>
    Move by Ruler
  <DD>
    Fill in the amount to move from the x and y offsets of the last measurements
    made with the <A HREF="charview.html#Ruler">ruler tool</A>.
  <DT>
    Rotate by Ruler
  <DD>
    Fill in the rotation angle from the angle of the last measurements made with
    the <A HREF="charview.html#Ruler">ruler tool</A>.
  <DT>
    Skew by Ruler
  <DD>
    Fill in the skew angle from the angle of the last measurements made with
    the <A HREF="charview.html#Ruler">ruler tool</A>.
</DL>
<P>
If you are in the font view, and if <A HREF="editmenu.html#From">Copy From</A>
is set to all fonts, then the transformation will also be applied to the
bitmaps. Not all of these transforms can be mapped to ones on the bitmap
font (arbitrary rotations, scales, etc. do not map). Only rotations by 90
degrees, flips, skews and moves will be approximated on the bitmap glyphs.
<P>
If you are in the font view, then any pair-wise kerning information whose
first glyph is selected will be scaled (but not translated) by the transformation
matrix. Similarly and simple positioning features that apply to a selected
glyph will be transformed by the matrix (but again not translated). You may
choose to scale kerning classes as well.
<P>
If you are in the font view or the outline view and there is no selection
(and you are in the foreground) there is a "[] Transform Background Too"
check box. If you check this then anything in the background will be transformed
with the foreground.
<P>
If you check [] Round to Int then after the transformation has been applied
everything will be rounded to an integer value.
<P>
Transformations in the Outline glyph view are not applied to any bitmaps.
(Nor are transformations in the bitmap window mapped back to the outline).
<H2>
  <A NAME="Non-Linear">Non-Linear </A>Transformations
</H2>
<P>
<IMG SRC="non-linear.png" WIDTH="282" HEIGHT="166" ALIGN="Right">Non-linear
transformations are defined by providing two expressions, one of which results
in the transformed value for the X coordinate, the other provides the y
coordinate. In the example at right:
<BLOCKQUOTE>
  <I>x' = 5&#183;x<SUP>2</SUP> + x + 3&#183;sin(y)<BR>
  y' = y</I>
</BLOCKQUOTE>
<P>
Expressions may be made up of the usual C operators: "+", "-", "*", "/",
"%", "!", "==", "&lt;", "&gt;", "&lt;=", "&gt;=", "!=", "&amp;&amp;", "||"
and "? :" as well as "^" which means "raise to the power of". They may also
contain the standard functions: "log", "exp", "sqrt", "sin", "cos", "tan",
"atan2", "abs", "rint", "floor", "ceil".
<P>
Note: In non-linear transformations the result is only an approximation to
the correct result (A linear transformation will transform a cubic spline
to another cubic spline. A non-linear transformation may not).
<H2>
  <IMG SRC="PoV.png" WIDTH="337" HEIGHT="331" ALIGN="Right"><A NAME="PoV">Point
  of View Projection</A>
</H2>
<P>
I have a hard time describing this. There are three different coordinate
systems involved. There is the (2D) coordinate system in which your glyph
has been drawn. There is a 3D coordinate system in which we embed it, and
finally there is another 2D coordinate system onto which we project it.
<P>
Assume your eye is at the origin of 3 space, and you are looking up along
the Z axis. Assume that the plane in which your glyph has been drawn
is tilted by an angle theta (from the XY plane in 3 space) and the intersection
between the Z axis and the drawing plane is z units along the Z axis. Assume
that the projection plane is parallel to the XY plane and is at a distance
d along the Z axis.
<P>
<IMG SRC="Bperspective.png" WIDTH="186" HEIGHT="180" ALIGN="Left">Then for
each point in the glyph we draw a line between that point and your eye (which
is at the origin). The location where that line intersects the projection
plane is the transformed location of that point. Again the result is only
an approximation.
<P>
The Point Of View dialog gives you a little more freedom than is described
above. It allows you to set the location of the eye (instead of fixing it
at the origin), and allows you to change in what direction the vanishing
point will lie (instead of fixing it on the y axis).
<P>
The dialog also calculates the location of the vanishing point as you change
fields (Note: It cannot figure out meta information like "Center of Selection",
so whenever the eye is positioned with this value, it just assumes a value
of 0 for that coordinate.
<P ALIGN=Center>
-- <A HREF="elementmenu.html">Prev</A> -- <A HREF="overview.html">TOC</A>
-- <A HREF="elementmenu.html">Next</A> --
</DIV>
</BODY></HTML>
